# Демонстрация функционала:

## Для ручного запуска на сервере средствами docker-compose:

```bash
docker-compose up -d
```

Результатом запуска будет следующее:

- Сборка docker образа на базе описанного Dockerfile;
- Запуск двух контейнеров из собранного образа:
    - flask-app1
    - flask-app2
- Запуск контейнера: 
    - load-balancer

## Результат запуска:

![img](test.gpeg)

при обновлении страницы можно увидить работу балансировщика нагрузки, т.к. тестовое приложение flask выводит на экран имя хоста на котором оно запущено:

![img](test1.gpeg)

## Для автоматизированного запуска на сервере средствами docker-compose и ansible:

Например: есть "чистая" виртуальная машина созданная в Yandex Cloud на базе ОС Debian:

![img](img/1.png)

С рабочего места "разработчика" достаточно выполнить сделующую команду:

- при условии того, что АРМ "разработчика" настроено должным образом (установлен ansible, в организации корректно настроен DNS и записи обновляются автоматически);

    - *ну или "разработчик" внёс соответствующую запись в файл "hosts" для идентификации созданной ВМ по имени, т.к. в inventory для ansible ожидается доступ по имени;*

```bash
ansible-playbook playbook.yml
```

![img](img/2.png)

![img](img/3.png)

Результат работы данного playbook-сценария получается следующий:

- на удалённой машине выполняется установка docker (в playbook вызывается роль docker);

- на удалённой машине выполняется установка docker-compose (в playbook вызывается роль docker-compose);

- перемещаются все необходимые файлы для запуска приложения;

- генерируется самоподписанный сертификат для доступа к приложению по HTTPS;

- выполняется запуск стека контейнеров описанных в docker-compose.yaml.

**Таким образом**, после успешного запуска playbook-сценария в браузере можно проверять работоспособность приложения:

![img](img/4.png)

- тестовое приложение flask выводит на экран имя хоста на котором оно запущено;

при обновлении страницы - можно проверить работоспособность балансировщика нагрузки:

![img](img/5.png)

Также можно наблюдать корректный доступ по протоколу HTTPS:

- *P.S. в контейнера который настроен в качестве балансировщика - реализован редирект с HTTP на HTTPS:*

![img](img/6.png)

![img](img/7.png)


